/*
	DefinedException.h
	
	Define all Exception Types used in WolvGen

	@author Wolfhead

*/
#pragma once

#ifndef _DEFINED_EXCEPTION_H
#define _DEFINED_EXCEPTION_H

#include "wfx.h"

/************************************************************************/
/* Exception class definition                                           */
/************************************************************************/

// WolvGen exception base
struct exception_base : virtual std::exception, virtual boost::exception{};

// scanner_exception
struct scanner_exception : virtual exception_base{};

// grammar_exception
struct grammar_exception : virtual exception_base{};

// production_arg_exception
struct production_arg_exception : virtual exception_base {};

// production_exception
struct production_exception : virtual exception_base{};

/************************************************************************/
/* Exception attribute definition                                       */
/************************************************************************/




typedef boost::error_info<struct tag_error_message, std::string> error_message;

typedef boost::error_info<struct tag_current_char_count, int> current_char_count;
typedef boost::error_info<struct tag_current_char, char> current_char;
typedef boost::error_info<struct tag_current_production, std::string> current_production;

#endif //#ifndef _DEFINED_EXCEPTION_H